home *** CD-ROM | disk | FTP | other *** search
/ PC Media 22 / PC MEDIA CD22.iso / share / prog / rodent / 3.asm < prev    next >
Assembly Source File  |  1995-08-19  |  4KB  |  196 lines

  1. ; less documented source with a few more miscellanious features
  2. .model small
  3. .stack 0300h
  4.  
  5. .data
  6. cx_save         dw      ?
  7. esdx_save       dd      ?
  8. message_left    db      "The left mouse button has been pressed!", 13, 10, "$"
  9. message_right   db      "The right mouse button has been pressed!", 13, 10, "$"
  10. message_moved   db      "The mouse has been moved!", 13, 10, "$"
  11.  
  12. .code
  13. start:
  14.  
  15. ; hide cursor
  16. mov     ah, 01h
  17. mov     ch, 01h
  18. mov     cl, 00h
  19. int     10h
  20.  
  21. mov     ax,0000h            ; initialize mouse
  22. int     33h
  23. mov     ax, 0001h           ; show mouse cursor
  24. int     33h
  25.  
  26. ; get, save, and reset mouse handler
  27. mov     ax, 0014h
  28. mov     cx, 0bh              ; act on mouse left or right button press
  29. push    cs
  30. pop     es
  31. mov     dx, offset cs:mouse
  32. int     33h
  33. mov     [cx_save], cx 
  34. mov     [word ptr esdx_save], es
  35. mov     [word ptr esdx_save+2],dx
  36.  
  37. ; wait for keypress
  38. mov     ah, 00h
  39. int     16h
  40.  
  41. ; hide cursor
  42. mov     ax, 0002h           
  43. int     33h
  44.  
  45. ; restore original mouse buttons and handler
  46. mov     cx, [cx_save]
  47. mov     es, [word ptr esdx_save]
  48. mov     dx, [word ptr esdx_save+2]
  49. mov     ax, 0014h
  50. int     33h
  51.  
  52.  
  53. ; restore cursor size
  54. mov     ah, 01h
  55. mov     ch, 029
  56. mov     cl, 030
  57. int     10h
  58.  
  59. call    ts_clear
  60.  
  61. mov     ah, 04ch
  62. int     21h
  63.  
  64. ;****************************************************************************
  65. ;*************** P R O C E D U R E S ****************************************
  66. ;****************************************************************************
  67. mouse   proc near
  68. push    ax
  69. push    bx
  70. push    cx
  71. push    dx
  72.  
  73. cmp     ax, 08h
  74. jnz     left_or_move
  75. jmp     right
  76. left_or_move:
  77. cmp     ax, 1
  78. jnz     left
  79. jmp     moved
  80. left:
  81. mov     bl,8
  82. push    cx
  83. push    dx
  84. pop     ax
  85. div     bl
  86. mov     dh, al
  87. pop     ax
  88. div     bl
  89. mov     dl, al
  90. inc     dl
  91.  
  92. mov     ah,02h
  93. mov     bh, 00h
  94. int     10h
  95.  
  96. call ts_clear
  97.  
  98. ; display message
  99. mov     ax, @data                                                                       
  100. mov     ds, ax
  101. mov     dx, offset message_left
  102. mov     ah, 09h
  103. int     21h
  104. jmp     exit
  105.  
  106. moved:                          ; mouse moved
  107. ; routine to place cursor
  108. mov     bl,8
  109. push    cx
  110. push    dx
  111. pop     ax
  112. div     bl
  113. mov     dh, al
  114. pop     ax
  115. div     bl
  116. mov     dl, al
  117. inc     dl
  118.  
  119. mov     ah,02h
  120. mov     bh, 00h
  121. int     10h
  122.  
  123. call ts_clear
  124.  
  125. mov     ax, @data
  126. mov     ds, ax
  127. mov     dx, offset message_moved
  128. mov     ah, 09h
  129. int     21h
  130. jmp      exit
  131.  
  132. right:                  ; right mouse button pressed
  133. mov     bl,8
  134. push    cx
  135. push    dx
  136. pop     ax
  137. div     bl
  138. mov     dh, al
  139. pop     ax
  140. div     bl
  141. mov     dl, al
  142. inc     dl
  143.  
  144. mov     ah, 02h
  145. mov     bh, 00h
  146. int     10h
  147.  
  148. call    ts_clear
  149.  
  150. ; display message
  151. mov     ax, @data
  152. mov     ds, ax
  153. mov     dx, offset message_right
  154. mov     ah, 09h
  155. int     21h
  156. jmp     exit
  157.  
  158.  
  159. exit:
  160.  
  161. pop     dx
  162. pop     cx
  163. pop     bx
  164. pop     ax
  165. mouse   endp
  166. retf                    ; this is a "far" procedure
  167. ;****************************************************************
  168.  
  169. ;****************************************************************
  170. ts_clear proc near      ; text screen clear
  171. push    ax
  172. push    cx
  173. push    es
  174. push    di
  175.  
  176. mov     ax, 0b800h
  177. mov     es, ax
  178. mov     di, 0000h
  179. mov     ax, 1700h
  180. mov     cx, 0fa0h
  181. cld
  182. repz
  183. stosw
  184.  
  185. pop     di
  186. pop     es
  187. pop     cx
  188. pop     ax
  189.  
  190. ret
  191. ts_clear endp
  192. ;****************************************
  193.  
  194.  
  195. end start
  196.